package executor;

import calculator.GeneraReport;
import calculator.GeneraReportCibi;
import calculator.GeneraReportRicette;
import com.lowagie.text.DocumentException;
import boundary.Home;
import dataview.Cibi;
import dataview.CriterioRicerca;
import dataview.FormatoReport;
import dataview.Report;
import dataview.Ricette;
import dataview.TipoReportCibi;
import dataview.TipoReportRicette;
import exceptions.DBException;
import exceptions.ElementoNonPresente;
import store.Ricetta;
import store.TutteRicette;
import store.TuttiCibi;
import store.TuttiMenu;

public class GestireRicette {
	
	private Cibi tuttiCibi;
	private Ricette tutteRicette;
	private Home home;
	private Main main;
	private boolean in_eliminazione = false;
	private Ricetta ricetta;
	
	public GestireRicette(Main main, Home home) {
		this.main = main;
		this.home = home;
		Ricette r = new Ricette();
		try {
			r = TutteRicette.getTutteRicette().ultimeCercate();
		} catch (DBException e) {
			e.printStackTrace();
		}
		home.creaAccedereRicette(this, r);
	}
	
	public void inserireRicetta(String nRicetta) {
		try {
			if (TutteRicette.getTutteRicette().presente(nRicetta))
				home.fallito();
			else {
				Ricetta r = new Ricetta(nRicetta);
				home.richiediInfoRicetta(r);
			}
		} catch (DBException e) {
			e.printStackTrace();
		}
	}
	
	public void eliminareRicetta(Ricetta ricetta) {
		in_eliminazione = true;
		try {
			if (TutteRicette.getTutteRicette().usataRicetta(ricetta) || TuttiMenu.getTuttiMenu().usataRicetta(ricetta)) {
				in_eliminazione = false;
				home.ko();
			} else {
				this.ricetta = ricetta;
				home.ok();
			}
		} catch (DBException e) {
			e.printStackTrace();
			in_eliminazione = false;
			home.ko();
		}
	}
	
	public void fareReport(Ricette ricette, TipoReportRicette tipo, FormatoReport formato, String path) throws DocumentException {
		Report r = GeneraReportRicette.generaReportRicette(ricette, tipo);
		GeneraReport.generaFile(r, formato, path);
	}
	
	public void finito() {
		
	}
	
	public void annulla() {
		if (in_eliminazione) in_eliminazione = false;
	}
	
	public void conferma() throws DBException, ElementoNonPresente {
		if (in_eliminazione) {
			in_eliminazione = false;
			TutteRicette.getTutteRicette().elimina(ricetta);
		}
	}
	
	public void ricercare(CriterioRicerca critRic) throws DBException {
		Ricette ricercati = TutteRicette.getTutteRicette().ricercare(critRic);
		home.passaRicette(ricercati);
	}
}
